/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.tesis2.pucp.Seguridad.DAO;

import com.tesis2.pucp.Modelo.TesisPerfil;
import com.tesis2.pucp.Modelo.TesisUsuario;
import com.tesis2.pucp.Util.HibernateUtil;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author pachon
 */
public class UsuarioDAO {
    
    public void guardarUsuario(TesisUsuario usuario){
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            session.saveOrUpdate(usuario);
            tx.commit();
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }        
    }
    
    public TesisUsuario validarUsuario(String login){
        TesisUsuario usuario = new TesisUsuario();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx =  session.beginTransaction();
        try {
            Query query = session.createQuery("from TesisUsuario where login = :nombre");
            query.setString("nombre", login);
            List lista = query.list();
            Iterator iter = lista.iterator();
            if (iter.hasNext()) {
                usuario = (TesisUsuario) iter.next();
                Hibernate.initialize(usuario.getIdusuario());
                Hibernate.initialize(usuario.getLogin());
                Hibernate.initialize(usuario.getPasword());
                Hibernate.initialize(usuario.getEstadosesion());
                Hibernate.initialize(usuario.getApellidomaterno());
                Hibernate.initialize(usuario.getApellidopaterno());
                Hibernate.initialize(usuario.getNombre());
                Hibernate.initialize(usuario.getTesisPerfil());
                
            }
        
        }catch(HibernateException e) {
            throw new HibernateException(e);
        } finally {
            session.close();            
        }
        
        return usuario;
    }
    
    public ArrayList<TesisPerfil> listarPerfil(){
        ArrayList<TesisPerfil> listaPerfil = new ArrayList<>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        
        List lista = session.createQuery("from TesisPerfil order by idperfil").list();
        Iterator iter = lista.iterator();
        while (iter.hasNext()) {    
            TesisPerfil a = (TesisPerfil) iter.next();        
            listaPerfil.add(a);
        }
        
        tx.commit();
        session.close();

        return listaPerfil;
    }

    public ArrayList<String> listarEstado() {
        ArrayList<String> estados = new ArrayList<>();
        estados.add("Activo");
        estados.add("Inactivo");
        estados.add("Inhabilitado");
        return estados;
    }
    
    public ArrayList<TesisUsuario> listarUsuario()
    {
        ArrayList<TesisUsuario> listaResultados = new ArrayList<>();       
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = session.beginTransaction();
        try{
            List lista = session.createQuery("from TesisUsuario order by Idusuario").list();        
            Iterator iter = lista.iterator();
            while (iter.hasNext()) {    
                TesisUsuario p = (TesisUsuario) iter.next();
                Hibernate.initialize(p.getTesisPerfil());
                Hibernate.initialize(p.getEstadosesion());
                Hibernate.initialize(p.getLogin());
                Hibernate.initialize(p.getNombre());
                Hibernate.initialize(p.getApellidopaterno());
                Hibernate.initialize(p.getApellidomaterno());
                Hibernate.initialize(p.getIdusuario());
                Hibernate.initialize(p.getPasword());
                listaResultados.add(p);
            }        
            tx.commit();
        } catch(HibernateException e) {
            throw new HibernateException(e);    
        } finally {
            session.close();
            return listaResultados;
        }         
    }    
    
}
